Форум dkLab и Denwer
Здесь общаются Web-разработчики.
Генеральный спонсор:
Хостинг «Джино»

Динамические select (fanat)
Author Message
fanat
Заглянувший



Joined: 12 Apr 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Thu Apr 12, 2007 10:04 pm (написано за 9 минут 11 секунд)
   Post subject: Динамические select
Reply with quote

Я видел подобную тему здесь (forum.dklab.ru/viewtopic.php?p=103329#103329), но там не совсем то, что мне надо.
Прошу помощи в решении следующей проблемы:
Существует форма регистрации, в которой в виде выпадающего списка реализованы страны и области. От выбора первой изменяется вторая. Данные лежат в БД, потому надо каждый раз производить выборку. Решал c помощью библиотеки JsHttpRequest. Работает это только в Firefox2. Понимаю, что ошибка в frontend.js, но не пойму где. Подскажите пожалуйста.

Файл html:
Code (html): скопировать код в буфер обмена
...
<script (december.com/html/4/element/script.html) src="ajax/lib/JsHttpRequest/JsHttpRequest.js"> (december.com/html/4/element/.html)</script>
<script (december.com/html/4/element/script.html) language="Javascript" src="ajax/cr/frontend.js"> (december.com/html/4/element/.html)</script>
..
<form (december.com/html/4/element/form.html) id="searchform" name="" action="" method="post"> (december.com/html/4/element/.html)<select (december.com/html/4/element/select.html) size="1" name="countryfrom" id="countryfrom" onchange="ChangeRegion('countryfrom', 'regionfrom')"> (december.com/html/4/element/.html)
 <option (december.com/html/4/element/option.html) label="" value="UA"> (december.com/html/4/element/.html)</option>
 <option (december.com/html/4/element/option.html) label="" value="RUS"> (december.com/html/4/element/.html)</option>
</select>
<br (december.com/html/4/element/br.html)/> (december.com/html/4/element/.html)<select (december.com/html/4/element/select.html) size="1" name="regionfrom" id="regionfrom"> (december.com/html/4/element/.html)
        <option (december.com/html/4/element/option.html) value=""> (december.com/html/4/element/.html)</option>
</select>
...
Файл frontend.js:
Code (JavaScript): скопировать код в буфер обмена
    function ChangeRegion(COUNTRY,REGION) {
        JsHttpRequest.query(
            'ajax/cr/backend.php', // backend
            {
                'str': document.getElementById(COUNTRY).value,
            },
            function(result, errors) {
                document.getElementById(REGION).innerHTML = "";
                for(i=0;i<result.length;i++)
                                {
                                        var option = document.createElement("option");
                                        var optionText = document.createTextNode(result[i]);
                                        option.appendChild(optionText);
                                        option.setAttribute("value",result[i]);
                                        document.getElementById(REGION).appendChild(option);
                                }

                        },
            false  // do not disable caching
        );
    }
Ну и файл backend.php (Для упрощения я убрал обращение к бд, это я понимаю как сделать, так что пока оставил просто массив. По 2 элемента достаточно :)):
Code (php): скопировать код в буфер обмена
<?php
$oblast_ua=array (www.php.net/array)("Винницкая обл.","Волынская обл.",);
$oblast_rus=array (www.php.net/array)("Архангельская обл","Астраханская обл.",);
require_once "../lib/JsHttpRequest/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("utf-8");
$str = $_REQUEST['str'];
switch($str) {
        case 'UA': $_RESULT=$oblast_ua; break;
        case 'RUS': $_RESULT=$oblast_rus; break;
        }
echo (www.php.net/echo) "<pre>";
?>
<b>QUERY_STRING:</b> <?=$_SERVER['QUERY_STRING'] . "\n"?>
<?php
echo (www.php.net/echo) "</pre>";
?>
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Thu Apr 12, 2007 11:13 pm (спустя 1 час 8 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Такое решение пойдёт?
debugger.ru/temp/select/1.php
Back to top
View user's profile Send private message
fanat
Заглянувший



Joined: 12 Apr 2007
Posts: 2
Карма: 0
   поощрить/наказать


PostPosted: Fri Apr 13, 2007 1:28 am (спустя 2 часа 15 минут; написано за 47 секунд)
   Post subject:
Reply with quote

ещё как, большое спасибо. Если несложно, вышлите код 2.php на fanat77@gmail.com, а то я немного запутался и не могу наладить ваше решение для себя.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Fri Apr 13, 2007 10:52 am (спустя 9 часов 23 минуты; написано за 23 секунды)
   Post subject:
Reply with quote

А зачем, если не секрет?
Там 2 строчки кода =)

debugger.ru/temp/select/2.phps
Back to top
View user's profile Send private message
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Fri May 04, 2007 7:25 pm (спустя 21 день 8 часов 33 минуты; написано за 9 секунд)
   Post subject:
Reply with quote

Спасибо! И мне помогли!
Back to top
View user's profile Send private message Send e-mail
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Mon May 07, 2007 1:45 pm (спустя 2 дня 18 часов 20 минут; написано за 46 секунд)
   Post subject:
Reply with quote

WingedFox, а почему, если родительский и дочерний селекты поместить в ячейки таблицы, то ничего не работает?
Как исправить?
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon May 07, 2007 1:48 pm (спустя 2 минуты; написано за 19 секунд)
   Post subject:
Reply with quote

Олег Мурашов
Не знаю, почему не работает =)
Посмотрите, какие ошибки оно кажет.
Back to top
View user's profile Send private message
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Mon May 07, 2007 1:54 pm (спустя 6 минут; написано за 54 секунды)
   Post subject:
Reply with quote

Я сам в JS мало что понимаю, но очень нужно Ajax прикрутить. Очень прошу помочь.
Вот что пишет в консоли ошибок Opera
Code (any language): скопировать код в буфер обмена
JavaScript - http://outdoor.loc/
Unknown thread
Error:
Unhandled exception: [Object DOMException]
code: 8
message: NOT_FOUND_ERR
Backtrace:
  Line 58 of inline#1 script in http://outdoor.loc/
    this.form.replaceChild(s, this.form[n]);
  Line 48 of inline#1 script in http://outdoor.loc/
    toggle.call(ctx, "slave");
  Line 239 of linked script http://outdoor.loc/kernel/lib/JsHttpRequest/JsHttpRequest.js
    onreadystatechange();
  Line 137 of linked script http://outdoor.loc/kernel/lib/JsHttpRequest/JsHttpRequest.js
    _changeReadyState(4);
  Line 299 of linked script http://outdoor.loc/kernel/lib/JsHttpRequest/JsHttpRequest.js
    th._dataReady(d.text, d.js);
  Line 1 of eval script
    var d = {id : "11785350891030", js : {options : [["Parent: 1 random: 65", "0"], ["Parent: 1 random: 67", "1"], ["Parent: 1 random: 77", "2"], ["Parent: 1 random: 50", "3"], ["Parent: 1 random: 20", "4"], ["Parent: 1 random: 44", "5"], ["Parent: 1 random: 97", "6"], ["Parent: 1 random: 77", "7"], ["Parent: 1 random: 29", "8"], ["Parent: 1 random: 60", "9"], ["Parent: 1 random: 38", "10"], ["Parent: 1 random: 66", "11"], ["Parent: 1 random: 15", "12"], ["Parent: 1 random: 0", "13"], ["Parent: 1 random: 99", "14"], ["Parent: 1 random: 78", "15"]]}, text : ""};
d.id = id;
JsHttpRequest.dataReady(d);
  Line 390 of linked script http://outdoor.loc/kernel/lib/JsHttpRequest/JsHttpRequest.js
    JsHttpRequest._tmp(id);
  At unknown location
    [statement source code not available]
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon May 07, 2007 2:03 pm (спустя 9 минут; написано за 46 секунд)
   Post subject:
Reply with quote

Замените
Code (JavaScript): скопировать код в буфер обмена
this.form.replaceChild
на
Code (JavaScript): скопировать код в буфер обмена
this.form[n].parentNode.replaceChild
Back to top
View user's profile Send private message
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Mon May 07, 2007 2:11 pm (спустя 7 минут; написано за 9 секунд)
   Post subject:
Reply with quote

Спасибо! Заработало!
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon May 07, 2007 2:14 pm (спустя 3 минуты; написано за 10 секунд)
   Post subject:
Reply with quote

Олег Мурашов
Завсегда пожалуйста! =)
Back to top
View user's profile Send private message
Валентин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri May 11, 2007 3:28 pm (спустя 4 дня 1 час 13 минут; написано за 4 минуты 58 секунд)
   Post subject:
Reply with quote

Уважаемый WingedFox!
Подскажите, пожалуйста, каким образом можно к выпадающему списку со значениями из AJAX добавить событие onChange.
Пробовал
Code (html): скопировать код в буфер обмена
<select (december.com/html/4/element/select.html) name='slave' id='slave' class='dropdown' onChange="alert('test');"> (december.com/html/4/element/.html)
, но судя по всему вы динамически создаете новый Select.
Я в java полный ноль, но очень нужно сделать, чтобы при смене подгруженных значений происходил переход на другую страницу.
Очень прошу помочь.
Back to top
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Fri May 11, 2007 3:36 pm (спустя 7 минут; написано за 1 минуту 26 секунд)
   Post subject:
Reply with quote

Валентин
После строчки
Code (JavaScript): скопировать код в буфер обмена
var s = document.createElement('select')
добавьте
Code (JavaScript): скопировать код в буфер обмена
s.onchange = function () {window.location = this.value}
.
Back to top
View user's profile Send private message
Валентин
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri May 11, 2007 3:53 pm (спустя 17 минут; написано за 19 секунд)
   Post subject:
Reply with quote

Ур-р-раааа, заработало!
Спасибо огромное!!!
Back to top
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Fri May 11, 2007 3:57 pm (спустя 4 минуты; написано за 6 секунд)
   Post subject:
Reply with quote

Пожалуйста.
Back to top
View user's profile Send private message
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Mon May 28, 2007 1:29 pm (спустя 16 дней 21 час 31 минуту; написано за 4 минуты 42 секунды)
   Post subject:
Reply with quote

Снова наблюдаются проблемы
Вот на этой странице происходит следующее... outdoor.wmate.ru/?region=6
Если в первом селекте (столбец Район) выбрать Ж/д вокзалы, то второй селект замечательно подгружается и все работает как следует, но если выбрать, например, Районы, то ничего не происходит (тоже самое с Аэропортами). В базе все это дело имеется.

У "Районов" id=6, Аэропорты 7
Вот php скрипт, который возвращает из базы данные outdoor.wmate.ru/ajax.php?val=6
Как видите, если подставить в адресной строке val=6 то все работает, но форма на это не реагирует.

Если не поленитесь и в левом меню выберите город Санкт-Петербург, то у видеть, что для него такая форма работает без нареканий и ajax.php возвращет все в том же виде что и для Москвы.
Не могу понять, почему такой клюк происходит только с некоторыми позициями из базы.

Вот на всякий случай код ajax.php (он тестовый).
Code (php): скопировать код в буфер обмена
<?php

require_once("config.php");
require_once(KERNEL."/ajax.config.php");

$_RESULT = array (www.php.net/array)();
$val = @$_REQUEST['val'];

if ( ereg (www.php.net/ereg)("[0-9]", $val) ) {
        $select = "SELECT * FROM `districts` WHERE ( `status` = $val )";
        $result = $mysql->sendQuery($select);

                while ( $row = $mysql->getArrayResult($result, MYSQL_BOTH) )
                {
                        $_RESULT['options'][] = array (www.php.net/array)($row['name'], $row['id']);
                }
} else {
        die (www.php.net/die)("Vrong parametr!");
}
?>
Back to top
View user's profile Send private message Send e-mail
Олег Мурашов
Участник форума



Joined: 05 Feb 2006
Posts: 32
Карма: -1
   поощрить/наказать

Location: Сакнт-Петербург

PostPosted: Mon May 28, 2007 3:29 pm (спустя 1 час 59 минут; написано за 28 секунд)
   Post subject:
Reply with quote

Вот что выдает консоль ошибок
Code (any language): скопировать код в буфер обмена
JavaScript - http://outdoor.wmate.ru/?region=6
Event thread: change
Error:
name: TypeError
message: Statement on line 38: Could not convert undefined or null to object
Backtrace:
  Line 38 of inline#1 script in http://outdoor.wmate.ru/?region=6
    for (i = 0, l = S[v].length;i < l;i++)
      Line 57 of inline#1 script in http://outdoor.wmate.ru/?region=6
    var s = C[this.value] || M.call(this, this.value);
  Line 1 of  script
    toggle.call(this, "slave");
  At unknown location
    [statement source code not available]
Back to top
View user's profile Send private message Send e-mail
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Tue May 29, 2007 11:15 am (спустя 19 часов 46 минут; написано за 1 минуту 13 секунд)
   Post subject:
Reply with quote

Олег Мурашов
Я наверное чего-то не понимаю, но при выборе вариантов "Район" и "Аэропорт" нет запросов к серверу.
Т.ч. вполне закономерно, что ничего не обновляется
Back to top
View user's profile Send private message
entrery
Заглянувший



Joined: 14 Oct 2007
Posts: 1
Карма: 0
   поощрить/наказать


PostPosted: Mon Oct 15, 2007 9:50 am (спустя 4 месяца 16 дней 22 часа 34 минуты; написано за 1 минуту 18 секунд)
   Post subject:
Reply with quote

WingedFox
Здрасвтуйте.
А как можно сделать чтоб 2-ой селект тоже посылал данные через JSHttpRequest ?
Back to top
View user's profile Send private message
lvs
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Nov 02, 2007 2:58 pm (спустя 18 дней 5 часов 8 минут; написано за 1 минуту 22 секунды)
   Post subject:
Reply with quote

Скажите почему этот скрипт не работает в Firefox?
При выполнении submit не передается выбранный option из подгруженного selecta методом post.
Back to top
selff
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Jan 25, 2008 9:43 pm (спустя 2 месяца 23 дня 6 часов 44 минуты; написано за 3 минуты 51 секунду)
   Post subject: работает
Reply with quote

Уважаемый fanat
ваш пример прекрасно работает во всех 3=х браузерах. спасибо.
в верхнем примере - одна только ошибка в строке:
<code>
'str': document.getElementById(COUNTRY).value,
</code>
там запятая в конце не нужна (IE ругается).
а вот пример WingedFox я приспособить для себя не смог.
он у меня глючит если много раз переключать селект туда сюда в ФФ вылазит ошибка form[n] has no properties
он еще и трудночитабельный ну м победить я его не смог.
Back to top
selff
Guest





Карма: 388
   поощрить/наказать


PostPosted: Fri Jan 25, 2008 10:01 pm (спустя 18 минут; написано за 1 минуту 44 секунды)
   Post subject: забыл сказать
Reply with quote

забыл сказать об еще одной правке вашей конструкции frontend.js
вместо:
Code (any language): скопировать код в буфер обмена
                for(i=0;i<result.length;i++)
                                {
                                        var option = document.createElement("option");
                                        var optionText = document.createTextNode(result[i]);
                                        option.appendChild(optionText);
                                        option.setAttribute("value",result[i]);
                                        document.getElementById(REGION).appendChild(option);
                                }
я вставил следующее:
Code (any language): скопировать код в буфер обмена
                objSel = document.getElementById(REGION);
                objSel.options.length = 0;
                for(i=0;i<result.length;i++){
                    objSel.options[objSel.options.length] = new Option(result[i][0], result[i][1]);
                }
т.е. я обнуляю селект и создаю заново при каждом изменении родительского селекта
Back to top
Argos
Guest





Карма: 388
   поощрить/наказать


PostPosted: Wed Feb 20, 2008 2:22 pm (спустя 25 дней 16 часов 20 минут; написано за 1 минуту 37 секунд)
   Post subject: селект аякса
Reply with quote

всё работает, но вот незадача, а если мне надо добавить ещё один селект

вот что имеем:

Выбор страны
Выбор региона

я хочу добавить:

Выбор города

У меня не получилось добавить третье поле, может дадите пример?
Back to top
Dilshok
Заглянувший



Joined: 27 Jan 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Tue Jan 27, 2009 3:28 pm (спустя 11 месяцев 7 дней 1 час 6 минут; написано за 29 секунд)
   Post subject:
Reply with quote

fanat Можешь выложить рабочий код у меня такая же проблема незнаю как решить
Back to top
View user's profile Send private message
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Tue Jan 27, 2009 4:28 pm (спустя 1 час 2 секунды; написано за 41 секунду)
   Post subject:
Reply with quote


М

Dilshok, forum.dklab.ru/about/todo/PravilaEtogoForuma-ProchitayteObyazatelno.html — на форуме принято обращение «на Вы».
Back to top
View user's profile Send private message
Dilshok
Заглянувший



Joined: 27 Jan 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Sat Feb 14, 2009 1:47 pm (спустя 17 дней 21 час 18 минут; написано за 1 минуту 35 секунд)
   Post subject:
Reply with quote

bævИзвиняюсь. В будущем учту.
fanat, если вам не трудно можете вы выложить рабочий код, ну просто очень нужно для дипломной работы. За ранее благодарю
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Sat Feb 14, 2009 2:46 pm (спустя 58 минут; написано за 10 секунд)
   Post subject:
Reply with quote

Ну вот, примерно такой набросок
debugger.ru/demo/other/dynselect/
Back to top
View user's profile Send private message
Dilshok
Заглянувший



Joined: 27 Jan 2009
Posts: 3
Карма: 0
   поощрить/наказать


PostPosted: Sat Feb 14, 2009 4:00 pm (спустя 1 час 13 минут; написано за 14 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Ну вот, примерно такой набросок debugger.ru/demo/other/dynselect/
Спасибо большое.
Back to top
View user's profile Send private message
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Sat Feb 14, 2009 10:38 pm (спустя 6 часов 37 минут; написано за 39 секунд)
   Post subject:
Reply with quote

Dilshok
На здоровье.
Если выловите багу с необновлением 3го селекта, будет замечательно =)
Back to top
View user's profile Send private message
GrayShadow
Guest





Карма: 388
   поощрить/наказать


PostPosted: Sun Apr 03, 2011 10:57 pm (спустя 2 года 1 месяц 17 дней 19 минут; написано за 1 минуту 6 секунд)
   Post subject:
Reply with quote

WingedFox wrote:
Такое решение пойдёт?
debugger.ru/temp/select/1.php
А где эти файлы, то ????
Без них эта тема немного бесполезна!
Back to top
WingedFox
Профессионал



Joined: 29 Apr 2003
Posts: 4064
Карма: 268
   поощрить/наказать

Location: Питер

PostPosted: Mon Apr 04, 2011 5:24 pm (спустя 18 часов 26 минут; написано за 12 секунд)
   Post subject:
Reply with quote

Спустя 2 года, судя по всему, погибли.
Back to top
View user's profile Send private message
utb
Guest





Карма: 388
   поощрить/наказать


PostPosted: Thu May 19, 2011 10:04 pm (спустя 1 месяц 15 дней 4 часа 39 минут; написано за 31 секунду)
   Post subject:
Reply with quote

WingedFox отпешитесь, нужен 1 и 2 файла
Back to top
bæv
Модератор «Дзена»



Joined: 27 Aug 2003
Posts: 7275
Карма: 9986
   поощрить/наказать


PostPosted: Tue Dec 18, 2012 1:14 pm (спустя 1 год 6 месяцев 29 дней 15 часов 10 минут)
   Post subject:
Reply with quote


М

Ветка выделена в отдельную тему «мусор, не относящийся к теме»,
расположенную в форуме Мусоропровод (18 Декабря 2012, 14:14).
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic All times are GMT + 3 Hours
Page 1 of 1    Email to a Friend.
Post a reply
Username
Subject
Господа спамеры и оптимизаторы!

Вы можете даже и не пытаться вставлять в текст поста ссылки - они все равно автоматически удаляются (вернее, тэги <a> заменяются на тэги <u>).

Но если не поверите и все же попытаетесь - как только увидите, что все безрезультатно, удалите свой пост, пожалуйста. Модераторы тоже люди, нехорошо, если они погрязнут в тоннах спама.
     

Disable BBCode in this post
Disable Smilies in this post
    HTML is OFF
BBCode is ON
Smilies are ON
You cannot post new topics in this forum. You can reply to topics in this forum. You cannot edit your posts in this forum. You cannot delete your posts in this forum. You cannot vote in polls in this forum. You cannot attach files in this forum. You can download files in this forum.
XML